home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Workbench Design
/
WB Collection.iso
/
workbench werkzeuge
/
memory & system tools
/
copymemquicker
/
source
/
cm010.asm
< prev
next >
Wrap
Assembly Source File
|
1996-04-07
|
2KB
|
143 lines
xdef Start10
xdef Quicker10
xdef Quickest10
xdef CopyLen10
Quicker10 equ Quicker-Start10
Quickest10 equ Quickest-Start10
CopyLen10 equ Stop10-Start10
Start10
dc.l '*Art'
Quicker
moveq #12,d1
cmp.l d1,d0
bcs.s tinycpy
move.w a0,d1
lsr.b #1,d1
bcc.s evena0
move.b (a0)+,(a1)+
subq.l #1,d0
evena0 move.w a1,d1
lsr.b #1,d1
bcc.s evenquicker
moveq #36*3,d1
cmp.l d1,d0
bcs.s tinycpy
* This is tricky! They said it couldn't be done...
unevcpy movem.l a2-a4/d2-d7,-(sp)
moveq #32,d1
move.w d1,a3
moveq #36,d1
move.w d1,a4
sub.l d1,d0
movea.l d0,a2
uloop movem.l (a0)+,d0-d7
rol.l #8,d0
rol.l #8,d1
rol.l #8,d2
rol.l #8,d3
rol.l #8,d4
rol.l #8,d5
rol.l #8,d6
rol.l #8,d7
move.b d0,(a1)+
move.b d1,d0
move.b d2,d1
move.b d3,d2
move.b d4,d3
move.b d5,d4
move.b d6,d5
move.b d7,d6
move.b (a0)+,d7
movem.l d0-d7,(a1)
adda.w a3,a1
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
move.b (a0)+,(a1)+
suba.w a4,a2
move.l a2,d0
bpl.s uloop
add.w a4,d0
movem.l (sp)+,a2-a4/d2-d7
subq.b #1,d0
bcs.s tdone
tloop move.b (a0)+,(a1)+
tinycpy dbf d0,tloop
tdone rts
evenquicker
cmpi.l #44*8,d0
bcs.s smlmov
moveq #44,d1
sub.l d1,d0
movem.l d2-d7/a2-a6,-(sp)
bigmov movem.l (a0)+,d2-d7/a2-a6
movem.l d2-d7/a2-a6,(a1)
adda.w d1,a1
sub.l d1,d0
bcc.s bigmov
add.w d1,d0
movem.l (sp)+,d2-d7/a2-a6
smlmov lsr.w #1,d0
beq.s even01
bcs.s sm13
lsr.w #1,d0
beq.s even2
bcs.s sm2
sm0 subq.w #1,d0
loop0 move.l (a0)+,(a1)+
dbf d0,loop0
even0 rts
sm2 subq.w #1,d0
loop2 move.l (a0)+,(a1)+
dbf d0,loop2
even2 move.w (a0),(a1)
rts
sm13 lsr.w #1,d0
beq.s even3
bcs.s sm3
sm1 subq.w #1,d0
loop1 move.l (a0)+,(a1)+
dbf d0,loop1
even1 move.b (a0),(a1)
rts
sm3 subq.w #1,d0
loop3 move.l (a0)+,(a1)+
dbf d0,loop3
even3 move.w (a0)+,(a1)+
move.b (a0),(a1)
rts
even01 bcs.s even1
rts
dc.l '*Art'
Quickest
cmpi.l #44*8,d0
bcs.s smlmovQ
moveq #44,d1
sub.l d1,d0
movem.l d2-d7/a2-a6,-(sp)
bigmovQ movem.l (a0)+,d2-d7/a2-a6
movem.l d2-d7/a2-a6,(a1)
adda.w d1,a1
sub.l d1,d0
bcc.s bigmovQ
add.w d1,d0
movem.l (sp)+,d2-d7/a2-a6
smlmovQ lsr.w #2,d0
beq.s done
subq.w #1,d0
qloop move.l (a0)+,(a1)+
dbf d0,qloop
done rts
Stop10